﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;

//给你一个字符串 s，找到 s 中最长的回文子串。
// https://leetcode.cn/problems/longest-palindromic-substring/
//class Solution {
//public:
//    string longestPalindrome(string s) {
//        if (s.size() == 1 || s.size() == 0)
//        {
//            return s;
//        }
//        int begin = 0;
//        int end = s.size() - 1;
//        int max = 0;
//        int b1 = 0;
//        int b2 = 0;
//        while (begin < s.size())
//        {
//            while (end >= 0)//从后往前寻找相同字符判断是否为回文
//            {
//                if (s[end] == s[begin])//判断回文字符串
//                {
//                    int s1 = begin;
//                    int e1 = end;
//                    int flag = 1;
//                    int size = end - begin + 1;
//                    while (s1 < e1)
//                    {
//                        if (s[s1] != s[e1])
//                        {
//                            flag = 0;
//                            break;
//                        }
//                        s1++;
//                        e1--;
//                    }
//                    if (flag == 1 && size > max)//如果是，则记录区间
//                    {
//                        max = size;
//                        b1 = begin;
//                        b2 = end;
//                        break;//因为是从后往前寻找，因此找到后一定是这两个字符之间最长的回文字符串
//                    }
//                }
//                end--;
//            }
//            begin++;
//            end = s.size();
//        }
//        string ret(s, b1, b2 - b1 + 1);
//        return ret;
//    }
//};
// 
// 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。

//如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ，就返回 0。

//假设环境不允许存储 64 位整数（有符号或无符号）。
//连接：https://leetcode.cn/problems/reverse-integer/
//大佬优雅的代码
//class Solution {
//public:
//    int reverse(int x) {
//        long sum = 0;
//        while (x != 0)
//        {
//            sum = sum * 10 + x % 10;
//            x /= 10;
//        }
//        return (int)sum == sum ? (int)sum : 0;
//    }
//};
class Solution {
public:
    int reverse(int x) {
        int sum = 0;
        while (x != 0)
        {
            if (sum > INT_MAX / 10 || sum < INT_MIN / 10)
            {
                return 0;
            }
            sum = sum * 10 + x % 10;
            x /= 10;
        }
        return sum;
        
    }
};
int main()
{
    auto ret = Solution().reverse(123);

    cout << ret << endl;
    return 0;
}